Playing a Compact Disc Track

The following example opens a CD audio device, plays the track specified by the bTrack parameter, and closes the device after playback is complete.

// Plays a specified audio track using MCI_OPEN, MCI_PLAY. Returns as

// soon as playback begins. The window procedure function for the

// specified window will be notified when playback is complete.

// Returns 0L on success; otherwise, returns an MCI error code.

DWORD playCDTrack(HWND hWndNotify, BYTE bTrack)

    UINT wDeviceID;

    DWORD dwReturn;

    MCI_OPEN_PARMS mciOpenParms;

    MCI_SET_PARMS mciSetParms;

    MCI_PLAY_PARMS mciPlayParms;

 

    // Open the CD audio device by specifying the device name.

    mciOpenParms.lpstrDeviceType = "cdaudio";

    if (dwReturn = mciSendCommand(NULL, MCI_OPEN,

        MCI_OPEN_TYPE, (DWORD)(LPVOID) &mciOpenParms))

   

        // Failed to open device. Don't close it; just return error.

        return (dwReturn);

    }

 

    // The device opened successfully; get the device ID.

    wDeviceID = mciOpenParms.wDeviceID;

 

    // Set the time format to track/minute/second/frame (TMSF).

    mciSetParms.dwTimeFormat = MCI_FORMAT_TMSF;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_SET,

        MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &mciSetParms))

   

        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

        return (dwReturn);

    }

    // Begin playback from the given track and play until the beginning

    // of the next track. The window procedure function for the parent

    // window will be notified with an MM_MCINOTIFY message when

    // playback is complete. Unless the play command fails, the window

    // procedure closes the device.

    mciPlayParms.dwFrom = 0L;

    mciPlayParms.dwTo = 0L;

    mciPlayParms.dwFrom = MCI_MAKE_TMSF(bTrack, 0, 0, 0);

    mciPlayParms.dwTo = MCI_MAKE_TMSF(bTrack + 1, 0, 0, 0);

    mciPlayParms.dwCallback = (DWORD) hWndNotify;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,

        MCI_FROM | MCI_TO | MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms))

   

        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

        return (dwReturn);

    }

 

    return (0L);

}

 

To specify a position relative to a track on a compact disc, you must use the track/minute/second/frame (TMSF) time format.